<?php

class ArrayUtil
{
    /**
     * 按规则解析获取结果
     * @param      $data
     * @param      $path
     * @param null $default
     * @return mixed|null
     */
    public static function dataGet($data, $path, $default = NULL)
    {
        if(is_string($path)){
            $path = explode('.', $path);
        }

        // 特殊处理
        switch($path[0]){
            case '[value]':
                return is_numeric($path[1]) ? (int)$path[1] : $path[1];
            default:
                break;
        }

        foreach($path as $segment){
            if(is_array($data) && array_key_exists($segment, $data)){
                $data = $data[$segment];
            } elseif(is_object($data) && property_exists($data, $segment)){
                $data = $data->$segment;
            } else{
                return $default;
            }
        }
        return $data;
    }
}